package net.hands.common;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;

import net.minidev.json.JSONArray;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONStyle;
import net.minidev.json.JSONValue;


/**
 * 说明:json工具类
 * <br>
 * <p>这是一个开源的软件，请在LGPLv3下合法使用、修改或重新发布。</p>
 * @author 陈侃(cknet@126.com, 13910090885)
 *         http://code.google.com/p/simpleframework/
 *         http://www.simpleframework.net
 */
public abstract class JsonUtils {
	/*-------------------------------object-to-json-----------------------------*/
	/**
	 * 
	* 说明：对象转json
	* @param ob 对象
	* @return String
	* @update 2012-10-2 下午5:01:20
	 */
	public static String  toJSON(final Object ob){
		return toJSON(ob,JSONStyle.NO_COMPRESS);
		
	}
	/**
	 * 
	* 说明：对象转json
	* @param ob 对象
	* @param compression json类型
	* @return String
	* @update 2012-10-2 下午5:01:32
	 */
	public static String  toJSON(final Object ob , final JSONStyle compression){
		return  JSONValue.toJSONString(ob, compression);
		
	}
	
	/*-------------------------------bean-to-json-------------------------------*/
   /**
   * 说明:map转json
   * @param data 容器
   * @return String
   * @update 2012-9-24 下午5:42:26
    */
	public static String toJSON(final Map<String, ?> data) {		
		return JSONObject.toJSONString(data);
	}
   /**
   * 说明:集合转json
   * @param data 集合
   * @return String
   * @update 2012-9-24 下午5:42:45
    */
	public static String toJSON(final Collection<?> data) {
		return JSONArray.toJSONString(new ArrayList<Object>(data));
	}

	/*-------------------------------json-to-bean-------------------------------*/
   /**
   * 说明:转对象
   * @param json json格式字符串
   * @param valueType 类型
   * @return <T> T
   * @update 2012-9-24 下午5:43:14
    */
	public static <T> T toObject(final String json, final Class<T> valueType) {
		if (!StringUtils.hasText(json)) {
			return null;
		}
		return JSONValue.parse(json, valueType);
	}
   /**
   * 说明:json转map 
   * @param json json格式字符串
   * @return Map<String, ?>
   * @update 2012-9-24 下午5:48:07
    */
	@SuppressWarnings("unchecked")
	public static Map<String, ?> toMap(final String json) {
		return toObject(json, Map.class);
	}
   /**
   * 说明:js转集合
   * @param json json格式字符串
   * @return Collection<?>
   * @update 2012-9-24 下午5:48:49
    */
	public static Collection<?> toCollection(final String json) {
		return toObject(json, Collection.class);
	}
}
